package com.hsgene.order.service;

import com.hsgene.common.util.result.ApiResult;
import com.hsgene.common.util.result.NullObject;
import com.hsgene.common.util.support.LimitHelper;
import com.hsgene.common.util.support.OrderHelper;
import com.hsgene.common.util.support.Pagination;
import com.hsgene.order.condition.OrderRefundCondition;
import com.hsgene.order.dto.console.OrderRefundDetailsDto;
import com.hsgene.order.dto.console.OrderRefundDto;
import com.hsgene.order.dto.console.OrderRefundInfoDto;

/**
 * 订单退款Service
 *
 * @author wangbing
 * @version 1.0, 2018/11/12
 */
public interface OrderRefundService {

    /**
     * 订单申请退款
     *
     * @param refund     退款信息
     * @param operatorId 操作人id
     * @return 退款申请结果
     */
    ApiResult<NullObject> orderRefund(OrderRefundInfoDto refund, String operatorId);

    /**
     * 分页查询退款列表
     *
     * @param condition   查询条件
     * @param orderHelper 排序参数
     * @param limitHelper 分页参数
     * @return 分页查询结果
     */
    ApiResult<Pagination<OrderRefundDto>> queryOrderRefunds(
            OrderRefundCondition condition, OrderHelper orderHelper, LimitHelper limitHelper);

    /**
     * 审核订单退款申请
     *
     * @param refundId     退款申请id
     * @param access       true：审核通过；false：审核拒绝
     * @param rejectReason 拒绝原因
     * @param operatorId   操作人id
     * @return 审核操作结果
     */
    ApiResult<NullObject> auditOrderRefund(
            String refundId, Boolean access, String rejectReason, String operatorId);

    /**
     * @param orderId 订单id
     * @return com.hsgene.order.dto.console.OrderRefundDetailsDto
     * @description 查询退款审批记录
     * @author maodi
     * @createDate 2018/11/27 11:17
     */
    OrderRefundDetailsDto queryOrderRefundDetails(String orderId);

    /**
     * 查询订单可能需要退款的套餐（全部）信息
     *
     * @param orderId 订单id
     * @return 订单套餐信息
     */
    ApiResult<OrderRefundInfoDto> findOrderRefundInfo(String orderId);
}
